// opyEquipCommand.cpp: implementation of the CopyEquipCommand class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "CopyEquipCommand.h"

#include "EquipSelector.h"
#include "ResourceInstance.h"
#include "CommandModuleRes.h"
#include "Interact.h"
#include "EquipManager.h"
#include "EquipGeometry.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CopyEquipCommand::CopyEquipCommand()
{

}

CopyEquipCommand::~CopyEquipCommand()
{

}

BOOL CopyEquipCommand::Execute()
{
	CResourceInstance rs;
	Equip* pEquip;
	EquipSelector select;
	if(select.Select())
	{
		pEquip = select.GetSelected();
	}
	else
	{
		return FALSE;
	}


	AcGePoint3d ptFir;
	AcGePoint3d ptSec;
	StdString strDesc;

	strDesc.LoadString(COMMAND_MOVE_BASEPOINT);
	if(!CInteract::GetPoint(strDesc,ptFir))
	{
		return FALSE;
	}


	strDesc.LoadString(COMMAND_MOVE_ENDPOINT);
	if(!(CInteract::GetPoint(ptFir,strDesc,ptSec)))
	{
		return FALSE;
	}

	AcGeMatrix3d xform;

	xform.setTranslation(ptSec.asVector());
	Equip* pNewEquip = this->CloneFrom(pEquip);
	pNewEquip->TransformBy(xform);
	

	return TRUE;
}

Equip* CopyEquipCommand::CloneFrom(Equip* pEquip)
{
	Equip* pNewEquip = new Equip();
	PropertyOwner* pOwner = dynamic_cast<PropertyOwner*>(pNewEquip);
	*pOwner = *(pEquip->GetPropertyContainer()) ;
	*pOwner= *(pEquip->GetFunctionContainer());
	pNewEquip->InitFormatPropertyContainer(pEquip->GetFormatPropertyContainer());
	pNewEquip->SetFixPos(pEquip->GetFixPos());
	pNewEquip->SetFixDir(pEquip->GetFixDir());
	pNewEquip->SetSecDir(pEquip->GetSecDir());
	
	if(GetCurEquipManager().AddEquip(pNewEquip)
		!= UESoft::eManagerSuccess)
	{
		delete pNewEquip;
		return FALSE;
	}

	EquipGeometry* pEquipGeo = new EquipGeometry(pNewEquip);
	pNewEquip->Attach(pEquipGeo);
	pNewEquip->SetCreate();
	pNewEquip->Notify();

	return pNewEquip;
}